package br.usjt.component.login.assembler;

import static br.com.usjt.component.commons.login.util.ValidationUtil.isNull;
import static br.com.usjt.component.commons.login.util.ValidationUtil.not;
import br.usjt.component.login.dto.LoginDTO;
import br.usjt.component.login.dto.PerfilDTO;
import br.usjt.component.login.dto.RecursoDTO;
import br.usjt.component.login.model.Login;
import br.usjt.component.login.model.Perfil;
import br.usjt.component.login.model.Recurso;

public class PerfilAssembler {

    private PerfilDTO dto;
    private Perfil entity;

    public PerfilAssembler(Perfil entity) {
        this.entity = entity;
        toDTO(entity);
    }

    public PerfilAssembler(PerfilDTO dto) {
        this.dto = dto;
        toEntity(dto);
    }

    private void toEntity(PerfilDTO dto) {
        this.entity = new Perfil();

        this.entity.setId(dto.getId());
        this.entity.setName(dto.getName());
        this.entity.setDescricao(dto.getDescricao());
        this.entity.setStatus(dto.isStatus());

    }

    private void toDTO(Perfil entity) {
        this.dto = new PerfilDTO();

        this.dto.setId(entity.getId());
        this.dto.setName(entity.getName());
        this.dto.setDescricao(entity.getDescricao());
        this.dto.setStatus(entity.isStatus());

    }

    public PerfilDTO getDto() {
        return dto;
    }

    public Perfil getEntity() {
        return entity;
    }

    static void associarPerfilDTOParaLoginDTO(Perfil perfil, LoginDTO loginDto) {
        if (not(isNull(perfil))) {
            PerfilDTO p = new PerfilAssembler(perfil).getDto();
            loginDto.setPerfilDTO(p);
        }
    }

    static void associarPerfilDTOParaRecursoDTO(Perfil perfil, RecursoDTO recursoDto) {
        if (not(isNull(perfil))) {
            PerfilDTO p = new PerfilAssembler(perfil).getDto();
            recursoDto.setPerfilDTO(p);
        }
    }

    static void associarPerfilParaLogin(PerfilDTO perfil, Login t) {

        if (not(isNull(perfil))) {
            Perfil p = new PerfilAssembler(perfil).getEntity();
            t.setPerfil(p);
        }
    }

    static void associarPerfilParaRecurso(PerfilDTO perfil, Recurso t) {

        if (not(isNull(perfil))) {
            Perfil p = new PerfilAssembler(perfil).getEntity();
            t.setPerfil(p);
        }
    }

    public static void toEntityAttached(Perfil undetached, Perfil attached) {

        attached.setDescricao(undetached.getDescricao());
        attached.setName(undetached.getName());
        attached.setStatus(undetached.isStatus());

    }

}
